{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Born data inversion test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "sys.path.append(\"/net/server/homes/sep/gbarnier/code/gpu/acousticIsoOp/test/lib/python/\")\n",
    "import genericIO\n",
    "import SepVector\n",
    "import Hypercube\n",
    "import Acoustic_iso_double\n",
    "import numpy as np\n",
    "import time\n",
    "#Solver library\n",
    "import pyLCGsolver as LCG\n",
    "import pyProblem as Prblm\n",
    "import pyStopperBase as Stopper\n",
    "from sys_util import logger"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Creating background and reflectivity model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Creating background model\n",
    "!Pad <velocityMarmousi.H beg1=105 end1=105 beg2=102 end2=102 extend=1 | Pad beg1=5 end1=5 beg2=5 end2=5 > velocityMarmousi.pad.H\n",
    "!Smooth <velocityMarmousi.pad.H rect1=5 rect2=5 repeat=3 > background.pad.H\n",
    "#Creating reflectivity\n",
    "!Add velocityMarmousi.pad.H background.pad.H scale=1,-1 > reflectivity.pad.H"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Creating necessary variables for propagation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "nts=1001\r\n",
      "dts=0.004\r\n",
      "sub=4\r\n",
      "nz=570\r\n",
      "nx=1914\r\n",
      "zPadMinus=100\r\n",
      "zPadPlus=110\r\n",
      "xPadMinus=100\r\n",
      "xPadPlus=104\r\n",
      "dz=0.01\r\n",
      "dx=0.01\r\n",
      "fMax=16\r\n",
      "zSource=10\r\n",
      "xSource=850\r\n",
      "nShot=50\r\n",
      "spacingShots=1\r\n",
      "depthReceiver=10\r\n",
      "nReceiver=1700\r\n",
      "dReceiver=1\r\n",
      "oReceiver=1\r\n",
      "saveWavefield=0\r\n",
      "wavefieldShotNumber=0\r\n",
      "blockSize=16\r\n",
      "fat=5\r\n",
      "nGpu=8\r\n"
     ]
    }
   ],
   "source": [
    "#Parameters for instantiating nonlinear operator\n",
    "#First argument is just a dummy one since it mimics the name of the main program (i.e., we mimic sys.argv)\n",
    "#vel = velocity model header file\n",
    "#model = wavelet header file\n",
    "#par = parameter file containing simulation information\n",
    "args=[\"dummy arg\",\"vel=background.pad.H\",\"sources=wlt.H\",\"model=reflectivity.pad.H\",\"par=parPythonTest.p\"]\n",
    "modelDouble, dataDouble, velDouble, parObject, sourcesVector, sourcesSignalsVector, receiversVector = Acoustic_iso_double.BornOpInitDouble(args)\n",
    "#Printing parameter file for reference\n",
    "!cat parPythonTest.p\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create Born operator object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "born_op=Acoustic_iso_double.BornShotsGpu(modelDouble,dataDouble,velDouble,parObject,sourcesVector,sourcesSignalsVector,receiversVector)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Generating Born data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Elapsed time =  13.576905488967896  seconds\n"
     ]
    }
   ],
   "source": [
    "t0 = time.time()\n",
    "born_op.forward(False,modelDouble,dataDouble)\n",
    "t1 = time.time()\n",
    "print(\"Elapsed time = \",t1-t0,\" seconds\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plotting the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/lib/python3/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n",
      "  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n",
      "/usr/lib/python3/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n",
      "  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f6f85532748>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline  \n",
    "import matplotlib.pyplot as plt\n",
    "data = np.reshape(dataDouble.getNdArray()[0,:,:],(1700,1001))\n",
    "plt.imshow(data.T);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Inversion of Born Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LINEAR CONJUGATE GRADIENT SOLVER\n",
      "Restart folder: /tmp/restart_2019-01-09T16-21-47.585474/\n",
      "\n",
      "iter = 0 obj = 2.5191091130445377e-07 residual norm = 0.0007098040659911931 gradient norm= 6.234287752704404e-08 feval = 2\n",
      "iter = 1 obj = 1.9366218358761392e-07 residual norm = 0.0006223539239726961 gradient norm= 6.234287752704404e-08 feval = 3\n",
      "iter = 2 obj = 1.8187795171609768e-07 residual norm = 0.0006031218217685819 gradient norm= 4.94103993275985e-08 feval = 5\n",
      "iter = 3 obj = 1.672974578994257e-07 residual norm = 0.0005784417735412717 gradient norm= 3.815434368448223e-08 feval = 7\n",
      "iter = 4 obj = 1.5464071452095582e-07 residual norm = 0.0005561307771131396 gradient norm= 2.244869889977963e-08 feval = 9\n",
      "iter = 5 obj = 1.3317410477178675e-07 residual norm = 0.0005160893779247999 gradient norm= 4.7368729383379105e-08 feval = 11\n",
      "iter = 6 obj = 1.2087990545071132e-07 residual norm = 0.0004916907637380064 gradient norm= 2.9243928167943523e-08 feval = 13\n",
      "iter = 7 obj = 1.1237246262192267e-07 residual norm = 0.0004740727017633617 gradient norm= 1.9568890508026016e-08 feval = 15\n",
      "iter = 8 obj = 9.579797984657425e-08 residual norm = 0.00043771674972958863 gradient norm= 2.043541691421069e-08 feval = 17\n",
      "iter = 9 obj = 8.425899384316721e-08 residual norm = 0.00041050941217690706 gradient norm= 2.094956919052038e-08 feval = 19\n",
      "iter = 10 obj = 7.735047248296348e-08 residual norm = 0.00039332039887085557 gradient norm= 1.679124750353367e-08 feval = 21\n",
      "Terminate: maximum number of iterations reached\n",
      "\n"
     ]
    }
   ],
   "source": [
    "#Create L2-norm linear problem\n",
    "model_vec = modelDouble.clone()\n",
    "model_vec.zero()\n",
    "L2Prob = Prblm.ProblemL2Linear(model_vec,dataDouble,born_op)\n",
    "#Create stopper\n",
    "niter = 10\n",
    "Stop  = Stopper.BasicStopper(niter=niter)\n",
    "#Create solver\n",
    "LCGsolver = LCG.LCGsolver(Stop,logger=logger(\"test.log\"))\n",
    "LCGsolver.setDefaults(iter_buffer=None,iter_sampling=1)\n",
    "#Running the solver\n",
    "LCGsolver.run(L2Prob)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline  \n",
    "import matplotlib.pyplot as plt\n",
    "model_np = np.array(L2Prob.model.getCpp(),copy=False)\n",
    "plt.imshow(model_np)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
